package com.hui.platform.falseworkapi.service.business.webmagic.processor;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.processor.PageProcessor;

/**
 * @author hui
 * @since 0.6.0
 */
public class BaiDuPageProcessor implements PageProcessor {

    //部分一：抓取网站的相关配置，包括编码、抓取间隔、重试次数等
    private Site site = Site.me()
            .setRetryTimes(3)
            .setSleepTime(1000);

    /**
     *process是定制爬虫逻辑的核心接口，在这里编写抽取逻辑
     *
     * 这里通过page.addTargetRequests()方法来增加要抓取的URL，
     * 并通过page.putField()来保存抽取结果。
     * page.getHtml().xpath()则是按照某个规则对结果进行抽取，这里抽取支持链式调用。
     * 调用结束后，toString()表示转化为单个String，all()则转化为一个String列表。
     *
     * Spider是爬虫的入口类。Pipeline是结果输出和持久化的接口，这里ConsolePipeline表示结果输出到控制台。
     * 执行这个main方法，即可在控制台看到抓取结果。webmagic默认有3秒抓取间隔，请耐心等待。
     * @param page page
     */
    @Override
    public void process(Page page) {
        // 部分二：定义如何抽取页面信息，并保存下来
        page.putField("title1", page.getHtml().xpath("//div[@class='mod-tab-content']//ul[@class='ulist focuslistnews']/li/a").all());
        page.putField("title2", page.getHtml().xpath("//ul[@class='ulist']/li/a").all());
        page.putField("title3", page.getHtml().xpath("//ul[@class='ulist mix-ulist']/li/a").all());

        // 部分三：从页面发现后续的url地址来抓取
        page.addTargetRequests(page.getHtml().links().regex("http://news\\.baidu\\.com/\\w+").all());

        if (page.getResultItems().get("title1") == null){
            //skip this page
            page.setSkip(true);
        }
    }

    @Override
    public Site getSite() {
        return site;
    }

    /*public static void main(String[] args) {
        Spider.create(new BaiDuPageProcessor())
            //从此URL开始抓  百度新闻
            .addUrl("http://news.baidu.com/")
            //保存结果处理
            .addPipeline(new FilePipeline("E:\\data\\webmagic\\baiduNews\\" + System.currentTimeMillis()))
            .thread(3)
            //启动爬虫
            .run();
    }*/
}
